<?php
/**
 * Контроллер административной панели, реализующий управление структурами данных
 * 
 * @category Phorm
 * @package Controller_Module_Control
 * @name /Phorm/Controller/Module/Control/Structures.php
 * @copyright phorm.ru
 * @since 05.05.2012
 * @author vladimir@kachalov.net
 */

class Phorm_Controller_Module_Control_Structures extends Phorm_Controller_Controller {
	
	/**
	 * Экземпляр класса структур данных
	 * @var Phorm_Structures
	 */
	public $Structures;
	
	
	/**
	 * Предиспетчер
	 * 
	 * @return void
	 */
		
	public function preDispatch() {
		
		$this->Structures = new Phorm_Structures();
		
	}
	
	
	/**
	 * Список структур
	 * 
	 * @return void
	 */
		
	public function indexAction() {
		
		$options = Phorm_Config::xml('grids/control/structures.xml','index');
		
		if($this->_request->isXmlHttpRequest()) {

			$rows = $this->Structures->getStructuresList($this->_params);
			$paginator = $this->Structures->getPaginator();
			$this->_helper->json(Phorm_JQuery_DataGrid::data($rows,$paginator,$options));
			
		} else {
			
			$this->view->assign('StructuresDataTable',$this->view->DataGrid('StructuresDataTable',$options));
			
		}
		
	}
	
	
	/**
	 * Создание структуры
	 * 
	 * @return void
	 */
		
	public function addAction() {
		
		$form = new Phorm_Form('forms/control/structures.xml','add');
		
		if($this->_request->isPost() && $form->isValid($this->_request->getPost())) {
			
			if($this->Structures->saveStructureForm($form)) {
				return $this->composeSuccessMessage('Структура сохранена','/control/structures/');
			} else {
				$this->composeTransactionErrorMessage($this->Structures->_errors);
			}
			
		}
		
		$this->view->assign('Form',$form);
		
	}
	
	
	/**
	 * Редактирование структуры
	 * 
	 * @return void
	 */
		
	public function editAction() {
		
		if(isset($this->_params['structureid']) && $StructureInfo = $this->Structures->getStructureInfo($this->_params['structureid'])) {
			
			$form = new Phorm_Form('forms/control/structures.xml','edit');
			$form->setDefaults($StructureInfo);
			
			if($this->_request->isPost() && $form->isValid($this->_request->getPost())) {
					
				if($this->Structures->saveStructureForm($form,$StructureInfo['structureid'])) {
					return $this->composeSuccessMessage('Изменения внесены','/control/structures/');	
				} else {
					$this->composeTransactionErrorMessage($this->Structures->_errors);	
				}
				
			}
			
			$this->view->assign('Form',$form);
			
		} else {
			
			return $this->composeErrorMessage('Структура с указанным Id не найдена');
			
		}
		
	}
	
	
	/**
	 * Удаление структуры
	 * 
	 * @return void
	 */
		
	public function deleteAction() {
		
		if(isset($this->_params['structureid']) && $StructureInfo = $this->Structures->getStructureInfo($this->_params['structureid'])) {
			
			if($this->Structures->deleteResource('structures',$StructureInfo['structureid'])) {
				return $this->composeSuccessMessage('Выбранная структура удалена');
			} else {
				return $this->composeDeleteErrorMessage($this->Structures->_errors);
			}
			
		} else {
			
			return $this->composeErrorMessage('Структура с указанным Id не найдена');
			
		}
		
	}
	
	
	/**
	 * Группы свойств
	 * 
	 * @return void
	 */
		
	public function groupsAction() {
		
		$options = Phorm_Config::xml('grids/control/structures.xml','groups');
		
		if($this->_request->isXmlHttpRequest()) {

			$rows = $this->Structures->getGroupsList($this->_params);
			$paginator = $this->Structures->getPaginator();
			$this->_helper->json(Phorm_JQuery_DataGrid::data($rows,$paginator,$options));
			
		} else {
			
			$this->view->assign('GroupsDataTable',$this->view->DataGrid('GroupsDataTable',$options));
			
		}
		
	}
	
	
	/**
	 * Создание группы
	 * 
	 * @return void
	 */
		
	public function addgroupAction() {
		
		$form = new Phorm_Form('forms/control/structures.xml','addgroup');
		
		if($this->_request->isPost() && $form->isValid($this->_request->getPost())) {
				
			if($this->Structures->saveGroupForm($form)) {
				return $this->composeSuccessMessage('Группа сохранена','/control/structures/groups/');	
			} else {
				$this->composeTransactionErrorMessage($this->Structures->_errors);
			}
			
		}
		
		$this->view->assign('Form',$form);
		
	}
	
	
	/**
	 * Редактирование группы
	 * 
	 * @return void
	 */
		
	public function editgroupAction() {

		if(isset($this->_params['groupid']) && $GroupInfo = $this->Structures->getGroupInfo($this->_params['groupid'])) {
			
			$form = new Phorm_Form('forms/control/structures.xml','editgroup');
			$form->setDefaults($GroupInfo);
			
			if($this->_request->isPost() && $form->isValid($this->_request->getPost())) {
				
				if($this->Structures->saveGroupForm($form,$GroupInfo['groupid'])) {
					return $this->composeSuccessMessage('Изменения внесены','/control/structures/groups/');	
				} else {
					$this->composeTransactionErrorMessage($this->Structures->_errors);	
				}
			}
			
			$this->view->assign('Form',$form);
			
		} else {
			
			return $this->composeErrorMessage('Группа с указанным Id не найдена');
			
		}
		
	}
	
	
	/**
	 * Удаление группы
	 * 
	 * @return void
	 */
		
	public function deletegroupAction() {

		if(isset($this->_params['groupid']) && $GroupInfo = $this->Structures->getGroupInfo($this->_params['groupid'])) {
			
			if($this->Structures->deleteResource('groups',$GroupInfo['groupid'])) {
				return $this->composeSuccessMessage('Выбранная группа удалена');
			} else {
				return $this->composeDeleteErrorMessage($this->Structures->_errors);
			}
			
		} else {
			
			return $this->composeErrorMessage('Группа с указанным Id не найдена');
			
		}
		
	}
	
	
	/**
	 * Список свойств
	 * 
	 * @return void
	 */
		
	public function propertiesAction() {
		
		$options = Phorm_Config::xml('grids/control/structures.xml','properties');
		
		if($this->_request->isXmlHttpRequest()) {

			$rows = $this->Structures->getPropertiesList($this->_params);
			$paginator = $this->Structures->getPaginator();
			$this->_helper->json(Phorm_JQuery_DataGrid::data($rows,$paginator,$options));
			
		} else {
			
			$this->view->assign('PropertiesDataTable',$this->view->DataGrid('PropertiesDataTable',$options));
			
		}
		
	}
	
	
	/**
	 * Создание свойства
	 * 
	 * @return void
	 */
		
	public function addpropertyAction() {
		
		// Получаем оригинальную форму
		$form = $this->Structures->getPropertyForm('addproperty');
		
		if($this->_request->isPost()) {
			
			// Модифицируем форму на основе POST-данных
			$form = $this->Structures->getPropertyFormModified($this->_request->getPost(),$form);
			
			if($form->isValid($this->_request->getPost())) {
				
				if($this->Structures->savePropertyForm($form)) {
					return $this->composeSuccessMessage('Свойство сохранено','/control/structures/properties/');
				} else {
					$this->composeTransactionErrorMessage($this->Structures->_errors);
				}
				
			}
			
			// Возвращаем модификации формы обратно
			$form = $this->Structures->getPropertyFormOriginal($form);
			
		}
			
		$this->view->assign('Form',$form);
		
	}
	
	
	/**
	 * Редактирование свойства
	 * 
	 * @return void
	 */
		
	public function editpropertyAction() {
		
		if(isset($this->_params['propertyid']) && $PropertyInfo = $this->Structures->getPropertyInfo($this->_params['propertyid'])) {
		
			// Получаем оригинальную форму
			$form = $this->Structures->getPropertyForm('editproperty');
			$form->setDefaults($PropertyInfo);
		
			if($this->_request->isPost()) {
				
				// Модифицируем форму на основе POST-данных
				$form = $this->Structures->getPropertyFormModified($this->_request->getPost(),$form);
				
				if($form->isValid($this->_request->getPost())) {
					if($FormData = $this->Structures->savePropertyForm($form,$PropertyInfo['propertyid'])) {
						return $this->composeSuccessMessage('Изменения внесены','/control/structures/properties/');
					} else {
						$this->composeTransactionErrorMessage($this->Structures->_errors);
					}	
				}
				
				// Возвращаем модификации формы обратно
				$form = $this->Structures->getPropertyFormOriginal($form);
				
			} else {
				
				// Модифицируем форму на основе информации о свойстве
				$form = $this->Structures->getPropertyFormModified($PropertyInfo,$form);

			}
		
			$this->view->assign('Form',$form);
		
		} else {
			
			return $this->composeErrorMessage('Свойство с указанным Id не найдено');
				
		}
		
	}
	
	
	/**
	 * Удаление свойства
	 * 
	 * @return void
	 */
		
	public function deletepropertyAction() {
		
		if(isset($this->_params['propertyid']) && $PropertyInfo = $this->Structures->getPropertyInfo($this->_params['propertyid'])) {
			
			if($this->Structures->deleteResource('properties',$PropertyInfo['propertyid'])) {
				return $this->composeSuccessMessage('Выбранное свойство удалено');
			} else {
				return $this->composeDeleteErrorMessage($this->Structures->_errors);
			}
			
		} else {
			
			return $this->composeErrorMessage('Свойство с указанным Id не найдено');
			
		}
		
	}
	
}